//.Garbage.java
package com.wqi.test;

public class Garbage {

	/**
	 * @param args
	 */
	@SuppressWarnings("deprecation")
	public static void main(String[] args) {
		if(args.length ==0){
			System.err.println("Usage:\n"+
					"java Garbage before \n or :\n"+
					"java Garbage after");
			return;
		}
		while(!Chair.f){
			new Chair();
			new String("To take up space");
		}
		System.out.println("After all Chairs have been created:\n"+
				"total created = "+Chair.created+
				", total finalized = "+Chair.finalized);
		if(args[0].equals("before")){
			System.out.println("gc();");
			System.gc();
			System.out.println("runFinalization():");
			System.runFinalization();
		}
		System.out.println("bye!");
		if(args[0].equals("after")){
			System.runFinalizersOnExit(true);
		}
	}

}

class Chair{
	static boolean gcrun= false;
	static boolean f = false;
	static int created=0;
	static int finalized = 0;
	int i;
	Chair(){
		i =++created;
		if(created ==47){
			System.out.println("Created 47");
		}
	}
	
	protected void finalize(){
		if(!gcrun){
			gcrun = true;
			System.out.println("Begining to finalize after "+ created+
					" Charis have been created");
		}
		if(i ==47){
			System.out.println("Finalize Chair #47,"+" Setting flag to stop Chair creation");
			f = true;
		}
		finalized++;
		if(finalized >=created){
			System.out.println("All "+finalized + " finalized");
		}
	}
}
